/* 
  配置连接池
*/
const mySql = require('mysql');
let { mysql } = require('./config');

let dataPoolConfig = {
  pool: {},
  create(forceCreate = false) {
    /* 创建数据库连接池
        forceCreate: 强制创建一个新的数据库连接池
    */
    try {
      if (this.pool.end) { console.log('---- 存在连接池 ---- '); return; } // 存在则不创建
      if (forceCreate) this.end()
    } catch (e) {
      console.log("----关闭连接池,发生错误----：" + e + "\n");
    }
    this.pool = mySql.createPool(mysql)
    console.log('============ 创建数据库连接池成功 ============',)
  },
  /** 向连接池对象发起连接，并从参数中获取sql语句和值进行操作数据库
    * @param sql {String} 要操作数据库的sql语句
    * @param arr {Array} 操作数据库要的参数
    * @param fun   操作数据库后的回调函数。接收两个参数，一个为操作数据库的错误信息，一个为操作数据库后的返回数据。
  */
  connect(sql = "", arr = [], fun = (err = new Error, data = []) => {
    console.log('2222=2222=', )
    if (err) console.log('  ===== 操作数据库的错误信息 =====  ', err.message), this.end()
    if (data && data.length) console.log(data)
  }) {
    this.pool.getConnection((connectErr, connect) => {
      if (connectErr) console.log('============= 获取连接对象错信息 ============='), console.log(connectErr.message);
      else connect.query(sql, arr, function (err, data) {
        // 使用apply的方式调用方法，便于在操作数据库后可以释放连接。
        fun.apply(connect, arguments);
        connect.release() // 释放该连接。
      })
    })
  },
  end() {
    /* 关闭连接池 */
    this.pool.end && this.pool.end(),
      console.log('关闭连接池')
  }
}
dataPoolConfig.create()

module.exports = dataPoolConfig